package com.justnow.offer;

import java.util.HashMap;
import java.util.Scanner;

/**
 * @author justnow
 * Created on 2020-09-13
 * Description
 * D星群岛
 * 时间限制： 3000MS
 * 内存限制： 589824KB
 * 题目描述：
 * D星群岛由n个小岛组成。为了加强小岛居民之间的交流，头目决定启动一个造桥工程，将全部n个岛连接到一起。
 *
 * 由于受到金融危机的影响，头目要求造桥的总成本要最少，并且还规定每一座桥的成本都不能超过k万D星币。
 *
 * 需要注意的是，由于受到地理环境和气候影响，有些小岛之间没有办法直接造桥。
 *
 * 现在给你m条小岛之间的造桥成本数据以及k的值，请问这个宏伟的造桥工程是否能够顺利完成？
 *
 * 注意：可能边不够，也可能费用超支。
 *
 *
 *
 * 输入描述
 * 多组输入，第1行输入一个正整数T表示输入数据的组数。
 *
 * 对于每一组输入数据：输入m+1行。
 *
 * 第1行包含三个正整数，分别表示n、m和k，n≤100，m≤1000，k≤10000，三个数字之间用空格隔开。
 *
 * 接下来m行表示m条小岛之间的造桥成本数据，每一行包含三个正整数，分别表示两个小岛的编号（从1开始）和这两个小岛之间的造桥成本（单位：万）。
 *
 * 输出描述
 * 针对每一组输入数据，如果能够完成造桥工程输出“Yes”，否则输出“No”。
 *
 *
 * 样例输入
 * 2
 * 3 3 400
 * 1 2 200
 * 1 3 300
 * 2 3 500
 * 3 3 400
 * 1 2 500
 * 1 3 600
 * 2 3 700
 * 样例输出
 * Yes
 * No
 *
 */
public class Didi02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int T = scanner.nextInt();
        for (int i = 0; i < T; i++) {
            int n = scanner.nextInt();
            int m = scanner.nextInt();
            int k = scanner.nextInt();
            UnionFind unionFind = new UnionFind(n);
            for (int j = 0; j < m; j++) {
                int start = scanner.nextInt();
                int end = scanner.nextInt();
                int cost = scanner.nextInt();
                if (cost <= k) {
                    unionFind.union(start, end);
                }
            }
            if (unionFind.getCount() == 1) {
                System.out.println("yes");
            } else {
                System.out.println("No");
            }
        }

    }
}

//通过并查集来构建森林，直到所有的节点都已联通为止，此时count为1
class UnionFind {
    private int[] record;
    private int count; //岛屿数目
    public UnionFind(int n) {
        record = new int[n + 1];
        for (int i = 0; i <= n; i++) {
            record[i] = i;
        }
        count = n;
    }

    public int find(int p) {
        while (record[p] != p) {
            p = record[p];
        }
        return p;
    }

    //造桥
    public void union(int p, int q) {
        int pid = find(p);
        int qid= find(q);
        if (pid == qid)
            return;
        record[pid] = qid;
        count--; //联通的岛屿算成一个
    }
    public int getCount() {
        return count;
    }
}
